const jwt = require('jsonwebtoken');

const Service = require('egg').Service;
/* 仅用来测试 */
const testUser = {
  email: '760358962@qq.com',
  password: '123456',

};
/* token 黑名单 如 退出登录的token会存在这里 正常来讲应该持久化存储如使用 redis 存储，这里的例子仅为了演示，所以就简单实现了一下 */
const tokenBlacklist = [];
class UserService extends Service {

  async findByEmail(email) {
    return testUser.email === email ? testUser : null;
  }

  createToken(data) {
    return jwt.sign(data, this.app.config.jwt.secret, {
      expiresIn: this.app.config.jwt.expiresIn,
    });
  }

  verifyToken(token) {
    if (tokenBlacklist.includes(token)) {
      this.ctx.throw(401, 'token已过期请重新登录');
    } else {
      return jwt.verify(token, this.app.config.jwt.secret);
    }

  }

  addTokenBlacklist(token) {
    tokenBlacklist.push(token);
  }

}

module.exports = UserService;
